#ifndef LOST_KINGDOM_H
#define LOST_KINGDOM_H

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iomanip>

#include <pthread.h>

#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>

#define MONSTERX 0x01
#define MONSTERY 0x02

#define ELF 0x100
#define ORC 0x200
#define HUMAN 0x300

#define MENU_NEWGAME 0x100
#define MENU_OPTIONS 0x200
#define MENU_CREDITS 0x300
#define MENU_EXIT 0x400

using namespace std;

extern void *loopMus(void*data);

class monster
{
    public:
        monster();
        ~monster();

        int getLeven(void) {return m_leven;}
        int getKracht(void) {return m_kracht;}
        int getSnelheid(void) {return m_snelheid;}
        int getGeld(void) {return m_geld;}

        void setLeven(int x) {m_leven = x;}
        void setKracht(int x) {m_kracht = x;}
        void setSnelheid(int x) {m_snelheid = x;}
        void setGeld(int x) {m_geld = x;}

        //adders
        void addLeven(int x) {m_leven += x;}
        void addKracht(int x) {m_kracht += x;}
        void addSnelheid(int x) {m_snelheid += x;}
        void addGeld(int x) {m_geld += x;}

        void remLeven(int x) {m_leven -= x;}
        void remKracht(int x) {m_kracht -= x;}
        void remSnelheid(int x) {m_snelheid -= x;}
        void remGeld(int x) {m_geld -= x;}

    private:
        int m_leven;
        int m_kracht;
        int m_snelheid;
        int m_geld;
};

class mens
{
    public:
        mens(int ras);
        ~mens();

        int getGeluk(void) {return m_geluk;}
        int getLeven(void) {return m_leven;}
        int getKracht(void) {return m_kracht;}
        int getSnelheid(void) {return m_snelheid;}
        int getGeld(void) {return m_geld;}
        char* getGezicht(void) {return m_gezicht;}

        void setGeluk (int x) {m_geluk = x;}
        void setLeven(int x) {m_leven = x;}
        void setKracht(int x) {m_kracht = x;}
        void setSnelheid(int x) {m_snelheid = x;}
        void setGeld(int x) {m_geld = x;}

        //adders
        void addGeluk(int x) {m_geluk +=x;}
        void addLeven(int x) {m_leven += x;}
        void addKracht(int x) {m_kracht += x;}
        void addSnelheid(int x) {m_snelheid += x;}
        void addGeld(int x) {m_geld += x;}

        void remGeluk(int x) {m_geluk -=x;}
        void remLeven(int x) {m_leven -= x;}
        void remKracht(int x) {m_kracht -= x;}
        void remSnelheid(int x) {m_snelheid -= x;}
        void remGeld(int x) {m_geld -= x;}

    private:
        int m_geluk;
        int m_leven;
        int m_kracht;
        int m_snelheid;
        int m_geld;
        
        char* m_gezicht;
        
};

class playsound
{
    public:
        playsound(string filename);
        ~playsound();

        string getFile(void) {return m_file;}
        bool getSuccess(void) {return succeeded;}
        bool getPlaying(void) {return playing;}

        void setPlaying(bool x) {playing = x;} //only for thread NEVER USE!

        int Playmusic(bool looped = false);
        void Stopmusic(void) {Mix_HaltMusic();}

    private:
        string m_file;
        Mix_Music* m_music;

        //enkel voor errorcheck
        bool succeeded;
        bool playing;

};


extern mens* leesSpelerGegevens(int type);
extern void leesNPCGegevens();
extern int doemenu(void);
extern char* textNaarBuffer(const char* filename);

extern bool battle(mens* speler, monster* vijhand);
extern void printStatsMens(mens* speler, bool printface = false);
extern void printStatsMonster(monster* vijhand);

extern void deGoedeFee(mens* speler);
extern void deVal(mens* speler);
extern void randomGeld(mens* speler);
extern void maakKeuze(mens* speler);

extern void leesIn(int* gegeven, bool natural = false);

#endif /*LOST_KINGDOM_H*/
